import { get, post, postWithQueryParams } from "@/api/request";

/**
 * 形象进度甘特图 控制器 / 形象进度甘特图 控制器添加形象进度甘特图
 * @param {object} data
 * @param {number} [data.ganttId] ganttId
 * @param {number} [data.isMilepost] 是否里程碑节点0-否，1-是
 * @param {string} [data.perTask] 前置任务
 * @param {string} [data.pic] 负责人
 * @param {string} [data.picName] picName
 * @param {number} [data.planDuration] 计划工期
 * @param {string} [data.planEndDate] 计划完成时间 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.planName] 计划名称
 * @param {string} [data.planStartDate] 计划开始时间 YYYY-MM-DD HH:mm:ss
 * @param {number} [data.progressReportId] progressReportId
 * @param {string} [data.projectId] 项目ID
 * @param {number} [data.sort] 排序号
 * @param {number} [data.taskLevel] 任务层级
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<ProjectGanttChart页面展示实体>}
 */
export function projectGanttChartAdd(data, config) {
  return post("/projectGanttChart/add", data, config);
}

/**
 * 形象进度甘特图 控制器 / 形象进度甘特图 控制器删除形象进度甘特图
 * @param {object} params
 * @param {object} data
 * @param {string} params.id 形象进度甘特图ID
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<ProjectGanttChart页面展示实体>}
 */
export function projectGanttChartDelete(params, data, config) {
  return postWithQueryParams("/projectGanttChart/delete", params, data, config);
}

/**
 * 形象进度甘特图 控制器 / 形象进度甘特图 控制器根据项目id删除甘特图
 * @param {object} params
 * @param {number} params.projectId projectId
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<number>}
 */
export function projectGanttChartDeleteByProjectId(params, config) {
  return get("/projectGanttChart/deleteByProjectId", params, config);
}

/**
 * 形象进度甘特图 控制器 / 形象进度甘特图 控制器查询形象进度甘特图详情
 * @param {object} params
 * @param {string} params.id 形象进度甘特图ID
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<ProjectGanttChart页面展示实体>}
 */
export function projectGanttChartDetail(params, config) {
  return get("/projectGanttChart/detail", params, config);
}

/**
 * 形象进度甘特图 控制器 / 形象进度甘特图 控制器查询形象进度甘特图
 * @param {object} data
 * @param {string} [data.createTime] 创建时间 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.createUser] 创建用户
 * @param {number} [data.delFlag] 删除标识 (0-未删除, 1-已删除)
 * @param {number} [data.id] id
 * @param {number} [data.isMilepost] 是否里程碑节点0-否，1-是
 * @param {number} [data.length] 分页大小
 * @param {number} [data.orderAsc] 排序方向
 * @param {string} [data.orderColum] 排序字段
 * @param {number} [data.pageIndex] 分页下标
 * @param {string} [data.perTask] 前置任务
 * @param {string} [data.pic] 负责人
 * @param {number} [data.planDuration] 计划工期
 * @param {string} [data.planEndDate] 计划完成时间 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.planName] 计划名称
 * @param {string} [data.planStartDate] 计划开始时间 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.projectId] 项目ID
 * @param {number} [data.sort] 排序号
 * @param {number} [data.start] 查询记录起始下标
 * @param {number} [data.taskLevel] 任务层级
 * @param {string} [data.updateTime] 更新时间 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.updateUser] 更新用户
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<array<ProjectGanttChart页面展示实体>>}
 */
export function projectGanttChartList(data, config) {
  return post("/projectGanttChart/list", data, config);
}

/**
 * 形象进度甘特图 控制器 / 形象进度甘特图 控制器分页查询形象进度甘特图
 * @param {object} data
 * @param {string} [data.createTime] 创建时间 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.createUser] 创建用户
 * @param {number} [data.delFlag] 删除标识 (0-未删除, 1-已删除)
 * @param {number} [data.id] id
 * @param {number} [data.isMilepost] 是否里程碑节点0-否，1-是
 * @param {number} [data.length] 分页大小
 * @param {number} [data.orderAsc] 排序方向
 * @param {string} [data.orderColum] 排序字段
 * @param {number} [data.pageIndex] 分页下标
 * @param {string} [data.perTask] 前置任务
 * @param {string} [data.pic] 负责人
 * @param {number} [data.planDuration] 计划工期
 * @param {string} [data.planEndDate] 计划完成时间 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.planName] 计划名称
 * @param {string} [data.planStartDate] 计划开始时间 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.projectId] 项目ID
 * @param {number} [data.sort] 排序号
 * @param {number} [data.start] 查询记录起始下标
 * @param {number} [data.taskLevel] 任务层级
 * @param {string} [data.updateTime] 更新时间 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.updateUser] 更新用户
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<分页返回实体<ProjectGanttChart页面展示实体>>}
 */
export function projectGanttChartPage(data, config) {
  return post("/projectGanttChart/page", data, config);
}

/**
 * 形象进度甘特图 控制器 / 形象进度甘特图 控制器更新形象进度甘特图
 * @param {object} data
 * @param {string} [data.createUser] 创建用户
 * @param {number} [data.id] id
 * @param {number} [data.isMilepost] 是否里程碑节点0-否，1-是
 * @param {string} [data.perTask] 前置任务
 * @param {string} [data.pic] 负责人
 * @param {number} [data.planDuration] 计划工期
 * @param {string} [data.planEndDate] 计划完成时间 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.planName] 计划名称
 * @param {string} [data.planStartDate] 计划开始时间 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.projectId] 项目ID
 * @param {number} [data.sort] 排序号
 * @param {number} [data.taskLevel] 任务层级
 * @param {string} [data.updateUser] 更新用户
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<ProjectGanttChart页面展示实体>}
 */
export function projectGanttChartUpdate(data, config) {
  return post("/projectGanttChart/update", data, config);
}

/**
 * @template T
 * @typedef {Object} 分页返回实体
 * @property {T[]} content - 内容
 * @property {number} elementsNo
 * @property {number} limit
 * @property {number} number
 * @property {number} totalElements
 * @property {number} totalPages
 * @description 分页返回实体
 */

/**
 * @typedef {object} BusinessAttachDetailVO
 * @property {string} attKey 附件key
 * @property {number} attOrder 附件排序
 * @property {number} attSize 附件大小(单位:MB)
 * @property {string} attSizeString 附件大小
 * @property {string} attSuffix 附件后缀
 * @property {string} attUrl 附件url
 * @property {number} attachId 文件id
 * @property {number} attachmentType 文件类型
 * @property {number} businessId 业务ID
 * @property {string} businessType 业务类型
 * @property {string} createTime 创建时间
 * @property {string} createUser 创建用户
 * @property {boolean} delFlag 删除标识(false:否, true:是)
 * @property {number} directoryId 目录id
 * @property {string} filename 文件名称
 * @property {number} id 附件ID
 * @property {string} originalName 原始文件名
 * @property {string} remark 备注
 * @property {string} updateTime 修改时间
 * @property {string} updateUser 修改用户
 */

/**
 * @typedef {object} ProjectGanttChart页面展示实体 形象进度甘特图页面展示实体
 * @property {string} actualCompletionTime 实际完成时间
 * @property {string} actualStartTime 实际开始时间
 * @property {number} advanceDays 提前/滞后天数
 * @property {array<BusinessAttachDetailVO>} attachList 附件
 * @property {boolean} canDelete 是否拥有删除权限
 * @property {boolean} canEdit 是否拥有编辑权限
 * @property {string} causeAnalysis 原因分析
 * @property {number} completionPercentage 完成百分比
 * @property {string} createTime 创建时间
 * @property {string} createUser 创建用户
 * @property {string} createUserDeptName 创建用户所属部门
 * @property {string} createUserRealName 创建用户真实姓名
 * @property {number} delFlag 删除标识 (0-未删除, 1-已删除)
 * @property {number} id
 * @property {number} isMilepost 是否里程碑节点0-否，1-是
 * @property {string} lastReportTime 最后一次上报时间
 * @property {string} overallPlannedEndTime 总计划结束时间
 * @property {string} perTask 前置任务
 * @property {string} pic 负责人
 * @property {number} planDuration 计划工期
 * @property {string} planEndDate 计划完成时间
 * @property {string} planName 计划名称
 * @property {string} planStartDate 计划开始时间
 * @property {string} projectId 项目ID
 * @property {string} remedialMeasuresDelayedConstructionPeriod 工期滞后的补救措施
 * @property {number} sort 排序号
 * @property {number} taskLevel 任务层级
 * @property {string} totalPlannedStartTime 总计划开始时间
 * @property {string} updateTime 更新时间
 * @property {string} updateUser 更新用户
 * @description 形象进度甘特图页面展示实体
 */
